<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="UTF-8">
    <title>Sucha's Blog - Archive for November, 2022</title>
    <meta name="generator" content="MarkdownProjectCompositor.lua">
    <meta name="author" content="Sucha">
    <meta name="keywords" content="suchang, programming, Linux, Lua">
    <meta name="description" content="Sucha's blog">
    <link rel="shortcut icon" href="../images/ico.png">
    <link rel="stylesheet" type="text/css" href="../styles/blog.css">
    <link rel="stylesheet" type="text/css" href="../styles/prism.min.css">
    <style id="site_theme"></style>
  </head>
  <body>
    <div id="body">
      <div id="text">
	   <!-- Page published by cmark-gfm begins here --><h1>Sucha's Blog ~ Archive for November, 2022</h1>
<p><a id="p1"></a></p>
<div class="date">22年11月29日 周二 23:40</div>
<h2>上线 mooncake 主页 https://moocscript.fun</h2>
<p>周末忙着将 <a href="https://github.com/lalawue/mooncake">mooncake</a> 的主页 <a href="https://moocscript.fun">https://moocscript.fun</a> 上线了。</p>
<p>蛮早就知道了 browser 上直接能跑的 Lua VM <a href="https://fengari.io">https://fengari.io</a>，而 mooncake 是一个纯 Lua 的 transpiler，除了可以通过 fengari 在浏览器里直接运行，还能直接操作 javascript 对象。</p>
<p>当然 fengari 也有一些限制，比如没有 io 库。而在 mooncake 这边，则需要将分开的工程文件 parser、compiler、core、class、utils 集成到一起，主要是在 HTML 加载一次就行了，分开的库耗费时间。</p>
<p>另外一方面，项目本身在不断的发展，因此这个集成需要做成自动化的，既然自动集成的步骤少不了，不如就都合在一起算了。还有，除了需要翻译到 fengari 能识别的 Lua，还需要加上 fengari 环境特别的变量，以及 loader 使用到的接口，才能最终支持 HTML 语法的脚本接口，比如：</p>
<pre><code class="language-bash">&lt;script src=&quot;/path/to/hello-word.mooc&quot; type=&quot;application/mooc&quot;&gt;&lt;/script&gt;

&lt;script type=&quot;application/mooc&quot;&gt;
import Core from &quot;moocscript.core&quot;
print(&quot;hello, world ! from &quot; .. Core.version())
&lt;/script&gt;
</code></pre>
<p>所以，也看了不少 fengari 上面的 javascript 代码，基本上也就是标准的 Lua 上 require 函数的 searcher / loader 的实现了。</p>
<p>这些 fengari 环境上的特别的变量，以及 loader 接口，算是粘合整个支撑环境的胶水代码，代码不多，但花了不少时间探索。</p>
<p>上面说的这些工作，当然不会是一个周末就搞定，当然也不可能每个周末都搞。</p>
<p>而上周末的工作，仅仅只是 HTML 页面的搭建，比如 UI，比如创建 browser 上面直接可以运行的例子，将 onclick 事件绑定到暴露到 window 的各种 moocscript 函数，还有比如 window.alert 之类的 Lua/mooncake 跟 browser javascript 的 fengari-interop 例子。</p>
<p>还加上了日间/夜间模式，之前在本主页尝试过的哈哈哈。</p>
<p>有了这个网站后，非 io 库相关的例子代码，其实都能直接在浏览器上面跑了，玩这个脚本语言，也不需要再下载一个 Lua 解释器，以及 mooncake 的支持库。</p>
<p>由于不需要后端 API 接口，简单的静态页面就够了，所以直接使用了 github pages 托管的 project repo，反正这些代码也是需要上传到 github 上的。还有，域名国内买的，主要是便宜。</p>
<p>项目主页 <a href="https://moocscript.fun">https://moocscript.fun</a> 顶级域名后缀表达了要义，have <strong>fun</strong> ~</p>
<div class="category"><a href="CategoryProgramming.html">CategoryProgramming</a> / <a href="2022-11.html#p1">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<p><a id="p0"></a></p>
<div class="date">22年11月26日 周六 09:48</div>
<h2>笑傲江湖</h2>
<p>我记得大学时候就看过，在当时功能机上面那么小的屏幕、那么小的字、那么长的小说居然看完了。</p>
<p>不过具体故事情节到现在已经忘了，所以才有这么个又看一次。笑傲江湖电视剧我不记得有没有看过，林青霞的电影我倒是看过的，前几个月还重温了一下。</p>
<p>故事虽然从福州的福威镖局开始，但主线始围绕华山派大弟子令狐冲展开。练武之人，始终逃不过一个武林盟主、武功最强，为此江湖可谓是血雨腥风。多少人为了武功最强舍弃一切，最后的《葵花宝典》跟前面的《辟邪剑谱》算是首尾呼应。</p>
<p>反而是中心人物令狐冲，看似任性妄为、桀骜不驯、处处留情，倒是最看重<code>道义</code>两字，有情有义。</p>
<ul>
<li>中间情节转折最大的是左冷禅未能做五岳派盟主，倒是被君子剑岳不群给设计夺取，前面刘正风金盆洗手被清理门户，当时嵩山派被拔的多高，反转后就跌的多重，也够反讽的</li>
<li>林平之为了报父母的不共戴天之仇，到处寄人篱下，忍气吞声，一直演戏直到拿到并掌握了《辟邪剑谱》，为了武功最高不被人欺反转欺人，不惜丢掉人性，跟岳灵珊做个表面夫妻</li>
<li>岳灵珊其实没啥错，但有爹妈守着，一直未能直面江湖，缺少江湖阅历，经历了两位亲人人性的扭曲，未能及时作出决断，结局有点惨</li>
<li>岳不群变化最大，小说开始是谦谦君子，中间为了保全华山派还算情有可原，后来为了夺取武林盟主，学习辟邪剑谱，丧失了人性</li>
<li>任我行跟中原各派有攻有守，打得有来有回，也是为了武功最高，学习吸星大法走火入魔，被东方不败逐步架空，并设计关入西湖底，出来后群殴了东方不败，继承了那套万岁的人设，人性开始逐渐扭曲，最终是无故暴毙</li>
<li>东方不败侧面描写远大于正面，魔教中厉害人物那么多，其居于高位不出场却控制全教，排场就是万岁的排场，以及后面用一根绣花针以一敌四完全不落下风，毕竟还有一点点扭曲的人性，为了杨莲亭丢掉了性命</li>
<li>任盈盈的出场算是悄无声息，在洛阳绿竹巷中作为老婆婆出场，身份模糊，作者故意不说，拖到后面才完全披露，作为魔教教主之女，为了令狐冲可以牺牲一切，经过了各种江湖道义的考验，久经波折，跟令狐冲在本书的最后结婚隐居江湖，算是一个很完满的结局</li>
</ul>
<p>在故事后面，任我行没能跟令狐冲来一场打斗，我觉得有些遗憾，也许是作者不想在后面喧宾夺主了，毕竟有一个最大的反转坏蛋岳不群作为对立面就够了吧。</p>
<div class="category"><a href="CategoryReading.html">CategoryReading</a> / <a href="2022-11.html#p0">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<!-- Page published by cmark-gfm ends here -->
  <div id="foot">2004-<script>var d = new
	Date();document.write(d.getFullYear())</script> &copy;
	Sucha. Powered by MarkdownProjectCompositor.
  </div>
  </div><!-- text -->
  <div id="sidebar">
  </div><!-- sidebar -->
  <script src="../js/prism.min.js" async="async"></script>
  <script src="../js/blog_sidebar.js"></script>
  </div> <!-- body -->
</body>
</html>